package com.misty.temple_method;

/**
 * 抽象模板中的基本方法尽量设计为protected类型，符合迪米特法则，
 * 不需要暴露的属性或方法尽量不要设置为protected类型。实现类若非必要，尽量不要扩大父类中的访问权限。
 */
public abstract class HummerModel {
    protected abstract void start();

    protected abstract void stop();

    protected abstract void alarm();

    protected abstract void engineBoom();

    public void run() {
        start();
        if (isAlarm()) {
            alarm();
        }
        engineBoom();
        stop();
    }

    protected boolean isAlarm() {
        return true;
    }
}
